/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.util.Date;
import java.util.Iterator;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.primefaces.event.RowEditEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteDocumento;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.util.UtilitarioCadenas;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;
import pe.com.cotelasa.scp.entidad.CorrelativoDocumento;
import pe.com.cotelasa.scp.entidad.TipoDocumento;

/**
 *
 * @author usuario
 */
@Named(value = "MBComponenteDocumento")
@Scope("request")
public class MBComponenteDocumento extends MBGenerico implements Serializable {

    private static Logger logger = Logger.getLogger(MBContacto.class);
    @Inject
    public BKComponenteDocumento bkDocumento;
    /*@Inject
     public IServicioTipoContacto servicioTipoContacto;*/
    @Autowired
    BKSession session;

    public MBComponenteDocumento() {
    }

    public void eliminarDocumento(ActionEvent actionEvent) {

        CorrelativoDocumento documentoEliminado = this.bkDocumento.getCurrentCorrelativoDocumento();

        if (documentoEliminado.getId() == null) {
            Iterator itr = this.bkDocumento.getListaCorrelativoDocumento().iterator();
            while (itr.hasNext()) {
                CorrelativoDocumento corDoc = (CorrelativoDocumento) itr.next();
                if (documentoEliminado.getSerie().equals(corDoc.getSerie())
                        && documentoEliminado.getIdTipoDocumento().equals(corDoc.getIdTipoDocumento())) {
                    itr.remove();
                    break;
                }
            }
        } else {

            this.bkDocumento.getListaCorrelativoDocumento().remove(documentoEliminado);

            Integer index = bkDocumento.getListaCorrelativoDocumentoEditar().indexOf(documentoEliminado);
            documentoEliminado.setEstadoRegistro(ESTADO_REGISTRO.INACTIVO.getValor());
            documentoEliminado.setFecModificacion(new Date());
            documentoEliminado.setUsrModificacion(session.getUsuario().getUsuario());
            this.bkDocumento.getListaCorrelativoDocumentoEditar().set(index, documentoEliminado);
        }
    }

    public void agregarDocumento(ActionEvent actionEvent) {
        CorrelativoDocumento documentoAgregado = this.bkDocumento.getFormularioCorrelativoDocumento();

        documentoAgregado.setSerie(UtilitarioCadenas.formatoSerieDocumento(Integer.parseInt(documentoAgregado.getSerie())));
        documentoAgregado.setNumero(UtilitarioCadenas.formatoNumeroDocumento(Integer.parseInt(documentoAgregado.getNumero())));

        documentoAgregado.setUsrCreacion(session.getUsuario().getUsuario());
        documentoAgregado.setFecCreacion(new Date());
        documentoAgregado.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());

        boolean band = false;
        for (CorrelativoDocumento corDoc : this.bkDocumento.getListaCorrelativoDocumento()) {
            if (Integer.parseInt(documentoAgregado.getSerie()) == Integer.parseInt(corDoc.getSerie())
                    && documentoAgregado.getIdTipoDocumento().equals(corDoc.getIdTipoDocumento())) {
                band = true;
                break;
            }
        }

        if (band) {
            mostrarError("Ya se agrego el documento " + documentoAgregado.getIdTipoDocumento().getNombre()
                    + " con la serie: " + documentoAgregado.getSerie());
        } else {
            this.bkDocumento.getListaCorrelativoDocumento().add(documentoAgregado);
            this.bkDocumento.getListaCorrelativoDocumentoEditar().add(documentoAgregado);
            this.bkDocumento.setFormularioCorrelativoDocumento(new CorrelativoDocumento());
        }
    }

    public void editarDocumento(RowEditEvent event) {
        CorrelativoDocumento documentoEditado = (CorrelativoDocumento) event.getObject();
        Integer index = bkDocumento.getListaCorrelativoDocumentoEditar().indexOf(documentoEditado);
        
        documentoEditado.setSerie(UtilitarioCadenas.formatoSerieDocumento(Integer.parseInt(documentoEditado.getSerie())));
        documentoEditado.setNumero(UtilitarioCadenas.formatoNumeroDocumento(Integer.parseInt(documentoEditado.getNumero())));
        
        if (documentoEditado.getId() != null) {
            documentoEditado.setUsrModificacion(session.getUsuario().getUsuario());
            documentoEditado.setFecModificacion(new Date());
        }

        this.bkDocumento.getListaCorrelativoDocumentoEditar().set(index, documentoEditado);

    }
}
